home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / objam01.lha / objam / objbas / String.m < prev   
Encoding:
Text File  |  1994-12-14  |  1.7 KB  |  71 lines

  1. /*
  2. ** ObjectiveAmiga: Implementation of class String
  3. ** See GNU:lib/libobjam/ReadMe for details
  4. */
  5.  
  6.  
  7. #include <stdarg.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #import "String.h"
  11.  
  12.  
  13. @implementation String
  14.  
  15. + str:(const char *)aStr { return [[[self alloc] init] str:aStr]; }
  16.  
  17. - free { if(string) free(string); return self; }
  18.  
  19. - (const char *)str { return string; }
  20.  
  21. - str:(const char *)aStr
  22. {
  23.   if(!aStr) { free(string); length=0; string=0; return self; }
  24.   if(string) free(string);
  25.   length=strlen(aStr)+1;
  26.   string=malloc(length);
  27.   strcpy(string,aStr);
  28.   return self;
  29. }
  30.  
  31. - (int)asInt { return atoi(string); }
  32.  
  33. - (long)asLong { return atol(string); }
  34.  
  35. - read:(TypedStream*)stream
  36. {
  37.   [super read:stream];
  38.   objc_read_types(stream,"I",&length);
  39.   // if(length)
  40.   // {
  41.   //  string=malloc(length);
  42.   objc_read_types(stream,"*",&string);
  43.   // }
  44.   return self;
  45. }
  46.  
  47. - write:(TypedStream*)stream
  48. {
  49.   [super write:stream];
  50.   objc_write_types(stream,"I",&length);
  51.   if(length) objc_write_types(stream,"*",&string);
  52.   return self;
  53. }
  54.  
  55. @end
  56.  
  57.  
  58. // String support functions:
  59. //
  60. // These are similar to their ANSI equivalents, but support
  61. // nil pointers.
  62.  
  63. static unsigned slen(char *a) { return a? strlen(a):0; }
  64. static char *scopy(char *a, char *b) { return (a&&b)? strcpy(a,b):0; }
  65. static char *sncopy(char *a, char *b, unsigned n) { return (a&&b)? strncpy(a,b,n):0; }
  66. static char *scat(char *a, char *b) { return (a&&b)? strcat(a,b):0; }
  67. static char *sncat(char *a, unsigned n, char *b, unsigned m)  { return (a&&b)? strncat(a,b,n):0; }
  68. static int scmp(char *a, char *b) { return (a&&b)? strcmp(a,b):0; }
  69. static void slower(char *a) { int i; if(a) for(i=strlen(a);i--;) a[i]=tolower(a[i]); }
  70. static void supper(char *a) { int i; if(a) for(i=strlen(a);i--;) a[i]=toupper(a[i]); }
  71.